package com.sojson.project.sys.sharding.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.sojson.project.sys.sharding.entity.dto.ShardingDto;

/**
 * 分库分表Dao
 * 
 * @author liu
 * @date 2022-10-24
 */
public interface ShardingDao {

    /**
     * 获取数据库名
     * 
     * @return
     */
    String getDatabaseName();

    /**
     * 判断表是否存在
     * 
     * @param tableName
     * @return
     */
    String tableExists(String tableName);

    /**
     * 获取ID字段名
     * 
     * @param databaseName
     * @param tableName
     * @return
     */
    List<String> getIdName(@Param("databaseName") String databaseName, @Param("tableName") String tableName);

    /**
     * 获取字段类型
     * 
     * @param databaseName
     * @param tableName
     * @param shardingColumn 
     * @return
     */
    String getFieldType(@Param("databaseName") String databaseName, @Param("tableName") String tableName,
        @Param("fieldName") String fieldName);

    /**
     * 查询要迁移的字段
     * 
     * @param databaseName
     * @param tableName
     * @param num
     */
    String getFields(@Param("databaseName") String databaseName, @Param("tableName") String tableName,
        @Param("num") int num);

    /**
     * 获取数据列表
     * 
     * @param dateDate
     * @return
     */
    List<Map<String, Object>> getDatasByNumId(ShardingDto dateDate);

    /**
     * 获取数据列表
     * 
     * @param dateDate
     * @return
     */
    List<Map<String, Object>> getDatasByStrId(ShardingDto dateDate);

    /**
     * 保存数据
     * 
     * @param dateDate
     * @param datas
     * @return
     */
    int save(@Param("dto") ShardingDto dateDate, @Param("datas") List<Map<String, Object>> datas);

    /**
     * 删除数据
     * 
     * @param dateDate
     * @param ids
     * @return
     */
    int remove(@Param("dto") ShardingDto dto, @Param("ids") List<Object> ids);

}